APDE USB / OTG communication

my arduino configured for constant cyclic transmission at a rate of 57600. he cannot accept anything now, he has to change it.

it runs when detect the suit hardware

1 Like

Edit manifest.
Wait 5 minutes.

upload this to arduino

////////////////////////////////////////////////////////////////////////
//
// AndroidLedOn
//
// simpel serial in. If a 1 is received via serial, the led is 
// switched on. All other chars will switch of the leds.
//
#define NUMBER_OF_CHANNELS 8
#define PINLED1 5

volatile char lastReceivedCharFromSerialIn = '\0';

void setup() {

  pinMode(PINLED1, OUTPUT);
  Serial.begin(9600);
 
}

void loop() {
  digitalWrite( PINLED1, lastReceivedCharFromSerialIn == '1');
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    lastReceivedCharFromSerialIn = (char)Serial.read(); 
  }
}

both must be matched

1 Like

It seems to me that it is much more reliable to simply receive messages from arduino at a speed of 57600. I see this in the terminal program.
let’s just try to get something! there is no point in changing the arduino, I can not run any sketches on the phone, they collapse when accessing the usb initialization line. and your last program crashed too. nothing works on the phone, no screen!

Serial.list (this) [0]
!!! Full crash programms!!!

it seems like one single library does not work well.

i am going to check all and inform you

1 Like

Ок.
.
.
.
No ellipse!

If delete line “if (Serial.list(this)[0] ==null){temp=0;}” -ellipse draws well

import org.slf4j.*;
import org.slf4j.helpers.*;
import com.yourinventit.processing.android.serial.*;
import com.hoho.android.usbserial.util.*;
import org.slf4j.spi.*;
import com.hoho.android.usbserial.driver.*;
import org.slf4j.impl.*;



Serial port;
int temp=1;
void setup(){
 if (Serial.list(this)[0] ==null){temp=0;}
//port = new Serial(this,Serial.list(this)[0],57600);
//port.bufferUntil('\n');
  size(800,800);
}

void draw (){
  fill(255, 0, 0);
  ellipse(100, 100, 100,100);
  text(temp, 300,300);
  
}
  1. polling the list of USB devices Serial.list (this) [0]
  2. based on point 1. setting port = new Serial (this, Serial.list (this) [0], 57600);
  3. read / write to port

dies in the first paragraph. the second and third paragraph are now irrelevant!

I am trying to repeat your successful feat.

I just need to take the last step to victory. how did you install the library you specified in APDE?

after all, this library lacks the elements necessary for connection, namely:
jar files are missing in the “libraries” folder! How did you manage to connect such a library to APDE? You wrote in your post that you did it. Did you convert the library with something, if so, how and with what?

@paulgoux
I saw that you are very good at libraries, please tell me how and with what I can recompile libraries from github so that they work on android in APDE (there is .jar, there is a folder “library”)?
I have seen the advice that this can be done using the “terminal ide”, but I have not found detailed instructions on how to do this anywhere. What are the options? I would be grateful for your help!

Im not particularly great with libraries, i jave an android repo that you can make use of ive posted it on the repo however i think ive figured out how to get any library onto android.

Take a look at the process.

Navigate to the library settings in apde until you get to this screen

Press dx dexer

Select the library you want to dex.(Note the ext requirements)

Then take a look at the files contained in the folder and their names.

As you can see i am dexing the fileWriter.jar library and so i need to name the output file fileWriter-dex.jar. Apde will dex your file and then you are good to go, i had no more crashes after this on my device.

Ive also managed to run my sketch with the jserial lib ive linked in a previous post.

i cant help any further as i dont have an arduino.

Ps

This is actually the solution posted by @jafal earlier in thread.

1 Like

and doesn’t need arduino.
the question is not about the robustness of the libraries, but about how to glue them to APDE.

I got it pretty good with dfx, use many days.
but where do I get the .jar files?
try sticking the serial port library used by @glv . the link in the previous post is just above. Just stick it on, you don’t have to run it.

Youll have to go with your preferred library, download them with a google search and copy the jar files into the appropriate folders.

The library im referring to was posted near the top of the convo, unfortunately its hard to scroll through such a long thread.

As for how to build libraries for android with eclipse.

Unfortunately i do not know how to do this in apde.

Now ive followed the thread as best i could and im pretty sure weve all posted solutions that work.

Help me understand which method you are using and what steps your are struggling with if anything.

Again following these steps i have managed to load the library with apde and run a sketch.

I jave not jeeded to amend any manifest or amend apde in any way.

Download the jar

Add the jar to your library folder with the appropriate folder structure.

Import lib in apde.
Dex lib in apde.
Add import to the sketch.

To confirm i have made no use of the pc here to achieve any of this, phone only.

Done

1 Like

@paulgoux here is what i made in android mode see if you can find something to compare with

this is working code via android mode

the link somewhere here

import com.yourinventit.processing.android.serial.*;

//import processing.serial.*;               // imports library for serial communication


Serial SerialPort;                         // defines Object for Serial

String ang="";
String distance="";
String data="";

int angle, dist;

void setup() {
  
   size (1200, 700); 
   
  // myPort = new Serial(this,"COM4", 9600);                     // starts the serial communication
  
 SerialPort = new Serial(this, Serial.list(this)[0], 9600);
  SerialPort .bufferUntil('.');    // reads the data from the serial port up to the character '.' before calling serialEvent
   
 
  background(0);
}

void draw() {
  
                              //for the blur effect
      fill(0,5);              //colour,opacity
      noStroke();
      rect(0, 0, width, height*0.93); 
      
      noStroke();
      fill(0,255);
      rect(0,height*0.93,width,height);                   // so that the text having angle and distance doesnt blur out
      
      
      drawRadar(); 
      drawLine();
      drawObject();
      drawText();
}


void serialEvent (Serial myPort) {                                                     // starts reading data from the Serial Port
                                                                                      // reads the data from the Serial Port up to the character '.' and puts it into the String variable "data".
      data = myPort.readStringUntil('.');
      data = data.substring(0,data.length()-1);
      
      int index1 = data.indexOf(",");                                                    
      ang= data.substring(0, index1);                                                 
      distance= data.substring(index1+1, data.length());                            
      
      angle = int(ang);
      dist = int(distance);
      System.out.println(angle);
}

void drawRadar()
{
    pushMatrix();
    noFill();
    stroke(10,255,10);        //green
    strokeWeight(3);
    
    translate(width/2,height-height*0.06);
    
    line(-width/2,0,width/2,0);
    
    arc(0,0,(width*0.5),(width*0.5),PI,TWO_PI);
    arc(0,0,(width*0.25),(width*0.25),PI,TWO_PI);
    arc(0,0,(width*0.75),(width*0.75),PI,TWO_PI);
    arc(0,0,(width*0.95),(width*0.95),PI,TWO_PI);
    
    line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));
    line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));
    line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90)));
    line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120)));
    line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150)));
    
    stroke(175,255,175); 
    strokeWeight(1);
    line(0,0,(-width/2)*cos(radians(15)),(-width/2)*sin(radians(15)));
    line(0,0,(-width/2)*cos(radians(45)),(-width/2)*sin(radians(45)));
    line(0,0,(-width/2)*cos(radians(75)),(-width/2)*sin(radians(75)));
    line(0,0,(-width/2)*cos(radians(105)),(-width/2)*sin(radians(105)));
    line(0,0,(-width/2)*cos(radians(135)),(-width/2)*sin(radians(135)));
    line(0,0,(-width/2)*cos(radians(165)),(-width/2)*sin(radians(165)));

    popMatrix();
}

void drawLine() {
  
    pushMatrix();
    
    strokeWeight(9);
    stroke(0,255,0);
    translate(width/2,height-height*0.06); 
    
   line(0,0,(width/2)*cos(radians(angle)),(-width/2)*sin(radians(angle)));
   

    popMatrix();
    
}


void drawObject() {
  
    pushMatrix();
    
    strokeWeight(9);
    stroke(255,0,0);
    translate(width/2,height-height*0.06);
   
    float pixleDist = (dist/40.0)*(width/2.0);                        // covers the distance from the sensor from cm to pixels
    float pd=(width/2)-pixleDist;
    
             
    float x=-pixleDist*cos(radians(angle));
    float y=-pixleDist*sin(radians(angle));
    
    if(dist<=40)                                                  // limiting the range to 40 cms
    {                               
       //line(0,0,pixleDist,0);  
       line(-x,y,-x+(pd*cos(radians(angle))),y-(pd*sin(radians(angle))));
    }
    popMatrix();
}

void drawText()
{
    pushMatrix();
    
    fill(100,200,255);
    textSize(25);
    
    text("10cm",(width/2)+(width*0.115),height*0.93);
    text("20cm",(width/2)+(width*0.24),height*0.93);
    text("30cm",(width/2)+(width*0.365),height*0.93);
    text("40cm",(width/2)+(width*0.45),height*0.93);
    
    textSize(40);
    text("YAinnoware",width*0.08,height*0.99);
    text("Angle :"+angle,width*0.45,height*0.99);
    
    if(dist<=40) {
      text("Distance :"+dist,width*0.7,height*0.99);
    }
      
   translate(width/2,height-height*0.06);
   textSize(25);
   
   text(" 30°",(width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));
   text(" 60°",(width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));
   text("90°",(width/2)*cos(radians(91)),(-width/2)*sin(radians(90)));
   text("120°",(width/2)*cos(radians(123)),(-width/2)*sin(radians(118)));
   text("150°",(width/2)*cos(radians(160)),(-width/2)*sin(radians(150)));
    
    popMatrix();  
  
}

i have added 2 files to the root folder

this in the main root AndroidManifest

<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="">
    <uses-sdk android:minSdkVersion="17" android:targetSdkVersion="28"/>
    <application android:icon="@mipmap/ic_launcher" android:label="">
        <activity android:name=".MainActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
            </intent-filter>
            <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter"/>
        </activity>
    </application>
</manifest>

and created folders inside root folder \res\xml then added this file device_filter

<?xml version="1.0" encoding="UTF-8"?>

-<resources>

<!-- 0x0403 / 0x6001: FTDI FT232R UART -->


<usb-device product-id="24577" vendor-id="1027"/>

<!-- 0x2341 / Arduino -->


<usb-device vendor-id="9025"/>

<!-- 0x16C0 / 0x0483: Teensyduino -->


<usb-device product-id="1155" vendor-id="5824"/>

<!-- 0x10C4 / 0xEA60: CP210x UART Bridge -->


<usb-device product-id="60000" vender-id="4292"/>

</resources>

i have tested many sketch all work fine

@ZENAR57 this is what i could reach

1 Like

Thank you and so i can understand, can you please explain the purpose of adding the device filter, is this a requirement for the library or the usb connection?

Also here is a link to the library @jafal was using

1 Like

your code completely works 100%.
full match of manifest files and device_filter.xml.
BUT!
THE LIBRARY THAT YOU USED ON YOUR PERSONAL COMPUTER, COULD YOU INSTALL (ADHESIVE) TO YOUR PHONE-ANDROID-APDE?

it is indicate that hardware connected and determined the usb driver chip there is other device filter files could be used i am going to compile sketch with out this file and see what happen

1 Like