Как я могу заставить светодиод работать с Java и IOIO? - PullRequest
0 голосов
/ 20 октября 2019

Мне нужно разработать приложение, которое запускает видео и индикатор одновременно. Приложение содержит три экрана: домашний экран (или меню), на котором будет два изображения / один экран для видео «gare» / другой для видео «mas».

Я использую IOIO-TOT доска для этого. Я уже разработал приложение на основе основного примера HelloIOIO, который создает togglebutton для питания state light на плате.

Я протестировал приложение с мостовым соединением, это означает, что телефон иплата подключена через компьютер и я запускаю приложение из Android Studio. Все работает нормально, видео воспроизводится и включаются светодиоды.

Но я обнаружил, что, используя желаемое окончательное соединение, то есть телефон, подключенный к плате IOIO с помощью кабеля OTG, запускаю приложение на телефоне (иногда он зависает), а светодиоды не горят.

Я думал, что лучшим решением было бы показать вам код, поскольку у него наверняка есть множество проблем, которых я не вижу! : S

On MainAcitvity:

lanceurgare = ImageView, запускающий ActivityGare при нажатии (для видео «gare»)

lanceurmas = ImageView, запускающий ActivityMas при нажатии(для видео "mas") *

package com.example.recreationappioio;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;


public class MainActivity extends AppCompatActivity {

    private ImageView lanceurgare;
    private ImageView lanceurmas;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lanceurgare = (ImageView) findViewById(R.id.lanceurgare);

        lanceurgare.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent otherActivity = new Intent(getApplicationContext(), ActivityGare.class);
                startActivity(otherActivity);
                finish();
            }
        });

        lanceurmas = (ImageView) findViewById(R.id.lanceurmas);

        lanceurmas.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent otherActivity = new Intent(getApplicationContext(), ActivityMas.class);
                startActivity(otherActivity);
                finish();
            }
        });

    }

}

На ActivityGare: я оставил основные комментарии от IOIO. Светодиод подключен к контакту 11.

package com.example.recreationappioio;

import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;

import ioio.lib.api.DigitalOutput;
import ioio.lib.api.IOIO;
import ioio.lib.api.IOIO.VersionType;
import ioio.lib.api.exception.ConnectionLostException;
import ioio.lib.util.BaseIOIOLooper;
import ioio.lib.util.IOIOLooper;
import ioio.lib.util.android.IOIOActivity;



public class ActivityGare extends IOIOActivity {


    /**
     * This is the thread on which all the IOIO activity happens. It will be run
     * every time the application is resumed and aborted when it is paused. The
     * method setup() will be called right after a connection with the IOIO has
     * been established (which might happen several times!). Then, loop() will
     * be called repetitively until the IOIO gets disconnected.
     */
    class Looper extends BaseIOIOLooper {
        /** The on-board LED. */
        private DigitalOutput led_;

        /**
         * Called every time a connection with IOIO has been established.
         * Typically used to open pins.
         */

        @Override
        protected void setup() throws ConnectionLostException {
            showVersions(ioio_, "IOIO connecté !");
            led_ = ioio_.openDigitalOutput(11,true);
            //enableUi(true);
        }

        /**
         * Called repetitively while the IOIO is connected.
         *
         * @throws ConnectionLostException
         *             When IOIO connection is lost.
         * @throws InterruptedException
         * When the IOIO thread has been interrupted.
         *
         * @see ioio.lib.util.IOIOLooper#loop()
         */
        @Override
        public void loop() throws ConnectionLostException, InterruptedException {
            led_.write(true);
            Thread.sleep(100);
        }

        /**
         * Called when the IOIO is disconnected.
         *
         * @see ioio.lib.util.IOIOLooper#disconnected()
         */
        @Override
        public void disconnected() {
            //enableUi(false);
            toast("IOIO déconnecté !");
        }

        /**
         * Called when the IOIO is connected, but has an incompatible firmware version.
         *
         * @see ioio.lib.util.IOIOLooper#incompatible(IOIO)
         */
        @Override
        public void incompatible() {
            showVersions(ioio_, "Incompatible firmware version!");
        }
    }

    /**
     * A method to create our IOIO thread.
     *
     */


    @Override
    protected IOIOLooper createIOIOLooper() {
        return new Looper();
    }

    private void showVersions(IOIO ioio, String title) {
        toast(String.format("%s\n" +
                        "IOIOLib: %s\n" +
                        "Application firmware: %s\n" +
                        "Bootloader firmware: %s\n" +
                        "Hardware: %s",
                title,
                ioio.getImplVersion(VersionType.IOIOLIB_VER),
                ioio.getImplVersion(VersionType.APP_FIRMWARE_VER),
                ioio.getImplVersion(VersionType.BOOTLOADER_VER),
                ioio.getImplVersion(VersionType.HARDWARE_VER)));
    }

    private void toast(final String message) {
        final Context context = this;
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(context, message, Toast.LENGTH_LONG).show();
            }
        });
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_video);

        VideoView videoView = findViewById(R.id.video_viewok);
        String videoPath = "android.resource://" + getPackageName() + "/" + R.raw.gare;
        Uri uri = Uri.parse(videoPath);
        videoView.setVideoURI(uri);
        videoView.start();

        MediaController mediaController = new MediaController(this);
        videoView.setMediaController(mediaController);
        mediaController.setAnchorView(videoView);

        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                Intent otherActivity = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(otherActivity);
                finish();
            }
        });
    }

}

ActivityMasпостроен точно на той же модели, я просто изменил контакт 11 на 13.

Я знаю, что это много чтения, но я не знаю, что делать дальше. Заранее спасибо за всю помощь и советы вамможете дать мне!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...